﻿using MultiLang;
using System.ComponentModel;

namespace Rsdn.Scintilla
{
	partial class ScintillaEditor
	{
	    /// <summary>
		/// Признак того, что команда Undo доступна.
		/// </summary>
		[Browsable(false)]
		public bool CanUndo
		{
			get { return SendEditor(ScintillaCommand.SCI_CANUNDO) != 0; }
		}

		/// <summary>
		/// Признак того, что команда Redo доступна.
		/// </summary>
		[Browsable(false)]
		public bool CanRedo
		{
			get { return SendEditor(ScintillaCommand.SCI_CANREDO) != 0; }
		}

		/// <summary>
		/// Признак разрешения механизма Undo/Redo.
		/// </summary>
		[DefaultValue(true)]
		[ml_Category(28,"Отмена/Восстановление")]
		public bool AllowUndo
		{
			get { return SendEditor(ScintillaCommand.SCI_GETUNDOCOLLECTION) == 1; }
			set { SendEditor(ScintillaCommand.SCI_SETUNDOCOLLECTION, value); }
		}

		/// <summary>
		/// Выполняет Undo.
		/// </summary>
		public void Undo()
		{
			SendEditor(ScintillaCommand.SCI_UNDO);
		}

		/// <summary>
		/// Выполняет Redo.
		/// </summary>
		public void Redo()
		{
			SendEditor(ScintillaCommand.SCI_REDO);
		}

		/// <summary>
		/// Очишает Undo буфер.
		/// </summary>
		public void ClearUndoBuffer()
		{
			SendEditor(ScintillaCommand.SCI_EMPTYUNDOBUFFER);
		}

		/// <summary>
		/// Начинает блок изменений, записываемых как едиснтвенная undo операция.
		/// </summary>
		public void BeginUndoOperation()
		{
			SendEditor(ScintillaCommand.SCI_BEGINUNDOACTION);
		}

		/// <summary>
		/// Завершает блок изменений, записываемых как едиснтвенная undo операция.
		/// </summary>
		public void EndUndoOperation()
		{
			SendEditor(ScintillaCommand.SCI_ENDUNDOACTION);
		}
	}
}
